package demo.begin;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author DGW-PC
 * @data   2018年8月28日下午2:29:47
 * <a href="https://www.cnblogs.com/dgwblog/">我的博客</a>
 */
@RequestMapping(value="/springmvc")
@Controller
public class SpingMvcTest {
	
	
	private final String SUCCESS="success";

	
	/**
	 * @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.
	 * @param id
	 * @return
	 */
	@RequestMapping("/testPathVariable/{id}")
	public String testPathVariable(@PathVariable("id") Integer id) {
		System.out.println("testPathVariable: " + id);
		return SUCCESS;
	}
	
	/**
	 * 支持使用ant风格来进行搭配 
	 * ? 匹配文件任意一个字符
	 * * 匹配文件中多个字符
	 * ** 匹配嵌套多层路径
	 * @return String
	 */
	@RequestMapping("/testAntPath/*/abc")
	public String testAntPath() {
		System.out.println("testAntPath");
		return SUCCESS;
	}
	
	
	/**
	 * 了解: 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
	 * @return
	 */
	@RequestMapping(value = "/testParamsAndHeaders", params = { "username",
			"age!=10" }, headers = { "Accept-Language:zh-CN,zh;q=0.9" })
	public String testParamsAndHeaders() {
		System.out.println("testParamsAndHeaders");
		return SUCCESS;
	}
	
	
	
	/**
	 * 常用: 使用 method 属性来指定请求方式
	 */
	@RequestMapping(value = "/testPostMethod", method = RequestMethod.POST)
	public String testMethod() {
		System.out.println("testMethod");
		return SUCCESS;
	}

	
	/**
	 * 1. @RequestMapping 除了修饰方法, 还可来修饰类 2. 1). 
	 * 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录
	 * 2). 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未标注 @RequestMapping，则方法处标记的 URL
	 * 相对于 WEB 应用的根目录
	 */
	@RequestMapping("/testRequestMapping")
	public String testRequestMapping() {
		System.out.println("testRequestMapping");
		return SUCCESS;
	}

}
